/*
 *      13salario.hpp
 *
 *      Copyright 2007 Marcelo Araujo <<araujo@FreeBSD.org>>
 *
 *      Copyright (c) 2007 Marcelo S. Araujo
 *      All rights reserved.
 *
 *      Redistribution and use in source and binary forms, with or without
 *      modification, are permitted provided that the following conditions are
 *      met:
 *
 *      * Redistributions of source code must retain the above copyright
 *        notice, this list of conditions and the following disclaimer.
 *      * Redistributions in binary form must reproduce the above
 *        copyright notice, this list of conditions and the following disclaimer
 *        in the documentation and/or other materials provided with the
 *        distribution.
 *      * Neither the name of the Intelbras nor the names of its
 *        contributors may be used to endorse or promote products derived from
 *        this software without specific prior written permission.
 *
 *      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *      "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *      A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *      OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *      LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *      DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *      THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 *      OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 */

class Salario_Atributos {
	float salario; 				// Salario base BRUTO;
	int meses_trabalhados; 		// Meses trabalhados;
	int meses_ano; 				// Meses do ano = 12;
	float rs; 					// Resultado 13salario;
	float desconto_INSS; 		// Desconto do INSS;
	float desconto_IR; 			// Desconto do IRRF;
	public:
								// Metodo construtor e destrutor;
								// s = salario, mt = meses trabalhados, ma = meses do ano;
		Salario_Atributos(float s, int mt, int ma);
		~Salario_Atributos();
								// rs = resultado calculo 13 salario(1o parcela);
		float Resultado_13salario_parcela1();
		 						// rs = resultado calculo 13 salario(2o parcela);
		float Resultado_13salario_parcela2(float desconto, float IRRF);
		float Salario_Descontos_INSS(float s);
		float Salario_Desconto_IRRF(float s);
		float Salario_Desconto_INSS(float s, float desconto_INSS);
		float Salario_Com_Descontos(float s, float desconto_INSS, float desconto_IR);
};

Salario_Atributos::Salario_Atributos(float s, int mt, int ma) {
								// Metodo construtor;
	salario = s;
	meses_trabalhados = mt;
	meses_ano = ma;
};

Salario_Atributos::~Salario_Atributos() {
								// Metodo destrutor;
};
								// Funcao para calculo 1o parcela 13o salario(sem descontos);
float Salario_Atributos::Resultado_13salario_parcela1() {
	rs = salario * meses_trabalhados;
	rs = rs / meses_ano;
	rs = rs / 2;
	return rs;
};
								// Funcao para calculo 2o parcela 13o salario(com descontos);
float Salario_Atributos::Resultado_13salario_parcela2(float desconto, float IRRF) {
	rs = desconto * meses_trabalhados;
	rs = rs / meses_ano;
	rs = rs / 2;
	rs = rs - IRRF;

	return rs;
};
								// Funcao para calculo do desconto INSS;
float Salario_Atributos::Salario_Descontos_INSS(float s) {
	salario = s;
	float calculo_INSS = 0;

	if (salario <= 868.29) {
		desconto_INSS = 7.65;
	} else if (salario <= 1140.00 && salario >= 868.30) {
		desconto_INSS = 8.65;
	} else if (salario <= 1447.14 && salario >= 1140.01) {
		desconto_INSS = 9;
	} else if (salario <= 2894.28 &&  salario >= 1447.15) {
		desconto_INSS = 11;
	} else if (salario > 2895.28) {
		desconto_INSS = 11;
	}
	calculo_INSS = salario / 100 * desconto_INSS;
	desconto_INSS = salario - calculo_INSS;

	return desconto_INSS;
};
							// Salario com desconto do INSS;
float Salario_Atributos::Salario_Desconto_INSS(float s, float desconto_INSS) {
	salario = s - desconto_INSS;

	return salario;
};
							// Base de desconto IR e deducao do imposto;
float Salario_Atributos::Salario_Desconto_IRRF(float s) {
	salario = s;
	float deducao = 0;
	float irrf_resultado = 0;

	if (salario <= 1313.69) {
		desconto_IR = 0;
		deducao = 0;
	} else if (salario >= 1313.70 && salario <= 2625.12) {
		desconto_IR = 15;
		deducao = 197.05;
	} else if (salario >= 2625.13) {
		desconto_IR = 27.5;
		deducao = 525.19;
	}

	irrf_resultado = desconto_INSS / 100 * desconto_IR;
	irrf_resultado = irrf_resultado - deducao;

	return irrf_resultado;
};
							// Salario liquido com base nos descontos INSS IRRF;
float Salario_Atributos::Salario_Com_Descontos(float s, float desconto_INSS, float desconto_IR) {
	salario = s;
	salario = salario - desconto_INSS - desconto_IR;

	return salario;
};
